package com.the.ui.widge.slidecard;//  ┏┓　　　┏┓
//┏┛┻━━━┛┻┓
//┃　　　　　　　┃
//┃　　　━　　　┃
//┃　┳┛　┗┳　┃
//┃　　　　　　　┃
//┃　　　┻　　　┃
//┃　　　　　　　┃
//┗━┓　　　┏━┛
//    ┃　　　┃                  神兽保佑
//    ┃　　　┃                  永无BUG！
//    ┃　　　┗━━━┓
//    ┃　　　　　　　┣┓
//    ┃　　　　　　　┏┛
//    ┗┓┓┏━┳┓┏┛
//      ┃┫┫　┃┫┫
//      ┗┻┛　┗┻┛

import android.graphics.Canvas;
import android.view.View;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.ItemTouchHelper;
import androidx.recyclerview.widget.RecyclerView;

import com.chad.library.adapter.base.BaseQuickAdapter;

import java.util.List;

/**
 * @author The one
 * @date 2021-11-29 10:11
 * @describe TODO
 * @email 625805189@qq.com
 * @remark
 */
public class SlideCardCallback<T> extends ItemTouchHelper.SimpleCallback {

    private final BaseQuickAdapter<T, ?> mAdapter;

    public SlideCardCallback(BaseQuickAdapter<T, ?> adapter) {
        // 设置方向，拖拽，滑动
        super(0, 15);
        mAdapter = adapter;
    }

    /**
     * 动画结束后：移除上面的Item,添加到最后
     */
    @Override
    public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
        // TODO 数据循环使用
        // 移除最上面的
        List<T> list = mAdapter.getData();
        T remove = list.remove(viewHolder.getLayoutPosition());
        // 添加到最后位置
        list.add(remove);
        mAdapter.notifyDataSetChanged();
    }

    @Override
    public void onChildDraw(@NonNull Canvas c, @NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
        super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
        // TODO 下面做一边滑动，一边把底部的View进行放大和缩放处理
        // 最大偏移量
        double maxDistance = recyclerView.getWidth() * 0.5f;
        // 偏移量
        double distance = Math.sqrt(dX * dX + dY * dY);
        // 移动的比列 = 放大的系数
        double fraction = distance / maxDistance;
        // 最大只能是1
        if (fraction > 1) {
            fraction = 1;
        }
        // 当前显示在界面的item数，0，1，2，3
        int itemCount = recyclerView.getChildCount();
        for (int i = 0; i < itemCount; i++) {
            View view = recyclerView.getChildAt(i);
            int level = itemCount - i - 1;
            // 对子View进行缩放平移处理
            if (level > 0) {
                // level < 3
                if (level < SlideCardLayoutManager.MAX_SHOW_COUNT - 1) {
                    // 最大达到它的上一个Item的效果
                    view.setTranslationY((float) (SlideCardLayoutManager.TRANS_Y_GAP * (level - fraction)));
                    view.setScaleX((float) (1 - SlideCardLayoutManager.SCALE_GAP * level + fraction * SlideCardLayoutManager.SCALE_GAP));
                    view.setScaleY((float) (1 - SlideCardLayoutManager.SCALE_GAP * level + fraction * SlideCardLayoutManager.SCALE_GAP));
                }
            }
        }
    }

    /**
     * 回弹时间
     */
    @Override
    public long getAnimationDuration(@NonNull RecyclerView recyclerView, int animationType, float animateDx, float animateDy) {
        return 600;
    }

    /**
     * 回弹距离
     */
    @Override
    public float getSwipeThreshold(@NonNull RecyclerView.ViewHolder viewHolder) {
        return 0.2f;
    }

    /**
     * Drag 时使用
     */
    @Override
    public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
        return false;
    }


}
